Many high performance graphics memory systems “attach” the memory for the Z coordinate, commonly referred to as the Z buffer, to the memory for the pixel color, commonly referred to as the image buffer, so that the Z coordinate and the color values for the pixel can reside in the same memory page, i.e., the same row address, of the frame buffer memory of the graphics memory system. In these types of systems, a pixel is processed by reading the old Z coordinate for the pixel from the Z buffer, comparing the old Z coordinate with a new Z coordinate, and, if the new Z coordinate passes the Z comparison test, writing the new Z coordinate and the associated pixel color into the Z buffer and image buffer, respectively, of the frame buffer memory. Once these steps have been performed, the next pixel is processed in an identical manner.
The Z comparison test is performed to determine whether the new pixel (i.e., the Z coordinate and color) is in front of the old pixel on the screen and needs to be written into the frame buffer memory or whether it can be discarded. If the Z coordinate associated with an X,Y screen coordinate is behind the Z coordinate contained in the Z buffer memory that is associated with that same screen coordinate, the new pixel can be discarded because the new pixel would not be viewable on the display monitor even if it was displayed. This situation corresponds to a Z comparison failure.
Since the Z coordinate and the color for a particular pixel are stored in the same page in the frame buffer memory, attachment of the Z coordinate to the pixel color eliminates the need for “re-paging”, i.e., closing the current page of memory and opening a new page of memory when switching between Z coordinate accesses and color accesses. However, attachment of the Z coordinate to the color produces an undesirable side effect as well, namely, it reduces the size of a page in XY screen coordinates. A page of synchronous graphics RAM (SGRAM) memory may store, for example, 1024 bytes. If this page is shared for 16-bit pixel color and Z coordinate values, then only 512 bytes are available to be used for the colors while the other 512 bytes must be used for the Z coordinates. Thus, the shape of the page in two-dimensional screen coordinate space might be 32×8 pixels, whereas if the memory for Z coordinates were detached and moved into a different page, the shape of the page in accordance with this example, could be 32×16 pixels. The taller page would be advantageous for both vectors and triangles.
Another undesirable side effect caused by attaching the Z memory to the pixel color memory so that each pixel can be processed to completion before processing begins on the next pixel, is that bus inefficiencies result. Specifically, processing a pixel to completion before beginning processing on the next pixel wastes bus bandwidth because each time the memory bus is “turned around”, i.e., changed from reads to writes or from writes to reads, dead states must be utilized to avoid bus contention problems and to satisfy pipe latencies.
Graphics operating systems for personal computers (PCs) usually allocate Z buffer memory independently from allocations for image buffer memory. Therefore, for PC graphics operating systems, it is preferable to utilize a graphics memory architecture that detaches the Z buffer from their associated image buffer to provide independent allocation for this memory. However, as stated above, detachment of the Z buffer from the image buffer requires that the frame buffer memory be re-paged each time accesses to the frame buffer memory are switched between Z coordinate accesses and color accesses, which can eliminate advantages attributable to the resulting larger page size.
Accordingly, a need exists for a graphics memory system that utilizes detached Z buffering to obtain the advantages thereof while eliminating the inefficiencies associated with re-paging when switching between a Z access and the associated color access for each pixel.